Interrupts এবং Timer Functions (Interrupts and Timer Functions in Arduino)

Computer Programming - আরডুইনো (Arduino)
259
259

Arduino প্রোগ্রামিংয়ে Interrupts এবং Timer Functions ব্যবহৃত হয় নির্দিষ্ট ঘটনার সময় স্বয়ংক্রিয়ভাবে কোডের অংশ চালানোর জন্য। এটি প্রোগ্রামের কার্যকারিতা বাড়ায় এবং বিভিন্ন পরিস্থিতিতে দ্রুত সাড়া দেওয়ার সুযোগ দেয়।

Interrupts (ইন্টারাপ্ট)

Interrupt হলো একটি সিগন্যাল যা Arduino বোর্ডকে জানায় যে একটি গুরুত্বপূর্ণ ঘটনা ঘটেছে, এবং এটি স্বয়ংক্রিয়ভাবে চলমান প্রোগ্রামটি থামিয়ে দেয় এবং একটি নির্দিষ্ট ফাংশন (ইন্টারাপ্ট সার্ভিস রুটিন বা ISR) চালায়।

Interrupt এর প্রকার

  1. External Interrupts: বাইরের ডিভাইস থেকে একটি সিগন্যাল গ্রহণ করে। যেমন একটি বাটন প্রেস করা।
  2. Timer Interrupts: টাইমার ব্যবহার করে নির্দিষ্ট সময় অন্তর কাজ করা।

External Interrupts উদাহরণ

volatile int interruptCounter = 0; // ভোলাটাইল ভেরিয়েবল

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT); // পিন 2 ইনপুট হিসেবে কনফিগার করা
  attachInterrupt(digitalPinToInterrupt(2), countInterrupt, RISING); // ISR যোগ করা
}

void loop() {
  Serial.println(interruptCounter); // ইন্টারাপ্ট কাউন্ট প্রিন্ট করা
  delay(1000); // ১ সেকেন্ড অপেক্ষা
}

void countInterrupt() {
  interruptCounter++; // ইন্টারাপ্ট ঘটলে কাউন্ট বাড়ানো
}

Timer Functions (টাইমার ফাংশন)

Timer Functions ব্যবহার করে নির্দিষ্ট সময় অন্তর কোন কোড বা কার্যক্রম সম্পাদন করা যায়। Arduino তে টাইমার ব্যবহারের জন্য millis() এবং micros() ফাংশন সাধারণত ব্যবহার করা হয়।

millis() এবং micros()

  • millis(): Arduino চালুর পর মোট মিলিসেকেন্ড গণনা করে। এটি ০ থেকে ৪,২৯৪,৯৬৭ মিলিসেকেন্ড (৪.২৯৪ সেকেন্ড) পর্যন্ত পরিমাপ করে।
  • micros(): Arduino চালুর পর মোট মাইক্রোসেকেন্ড গণনা করে। এটি ০ থেকে ৪,১৯৯,৯৯৯,৯৯৯ মাইক্রোসেকেন্ড (৪.১৯৯ সেকেন্ড) পর্যন্ত পরিমাপ করে।

উদাহরণ: Timer Function ব্যবহার

unsigned long previousMillis = 0; // পূর্ববর্তী সময়ের জন্য ভেরিয়েবল
const long interval = 1000; // ১ সেকেন্ডের ইন্টারভ্যাল

void setup() {
  Serial.begin(9600);
}

void loop() {
  unsigned long currentMillis = millis(); // বর্তমান সময় সংগ্রহ করা

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis; // পূর্ববর্তী সময় আপডেট করা
    Serial.println("1 second passed"); // ১ সেকেন্ডের বার্তা প্রিন্ট করা
  }
}

Interrupt এবং Timer Functions এর ব্যবহারিক প্রয়োগ

  • বাটন প্রেসের জন্য সাড়া: একটি বাটনে চাপ দিলে ইন্টারাপ্ট ব্যবহার করে প্রোগ্রামে সাড়া দেওয়া।
  • ডেটা লগিং: টাইমার ফাংশনের মাধ্যমে নির্দিষ্ট সময় অন্তর সেন্সর ডেটা সংগ্রহ করা।
  • ইভেন্টের ট্র্যাকিং: নির্দিষ্ট সময়ে কার্যক্রম পরিচালনার জন্য টাইমার এবং ইন্টারাপ্ট ব্যবহার করা।

সমস্যা সমাধান

  • মাল্টিপল ইন্টারাপ্ট: একই পিনের জন্য একাধিক ইন্টারাপ্টের কারণে সমস্যা হতে পারে। প্রতিটি ইন্টারাপ্টের জন্য আলাদা পিন ব্যবহার করা উচিত।
  • ভোলাটাইল ভেরিয়েবল: ISR-এ ব্যবহৃত ভেরিয়েবলগুলোকে ভোলাটাইল হিসেবে ডিফাইন করা উচিত, যাতে সঠিক মান পাওয়া যায়।
  • টাইমার রিসেট: টাইমার সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করতে millis() এবং micros() এর মধ্যে ব্যবধান পরীক্ষা করা।

Arduino তে Interrupts এবং Timer Functions ব্যবহার করে প্রোগ্রামকে আরও কার্যকর এবং ইন্টারঅ্যাকটিভ করা যায়। এই বৈশিষ্ট্যগুলো ব্যবহারকারীকে দ্রুত প্রতিক্রিয়া জানাতে এবং বিভিন্ন পরিস্থিতিতে কার্যক্রম পরিচালনা করতে সহায়তা করে।

common.content_added_by

Interrupts কী এবং এর প্রয়োজনীয়তা

191
191

Interrupts হলো একটি শক্তিশালী ফিচার যা মাইক্রোকন্ট্রোলারকে কোনো বিশেষ ঘটনার জন্য অবিলম্বে প্রতিক্রিয়া জানাতে সক্ষম করে। এটি সাধারণত প্রধান কোডের কার্যক্রম চলাকালীন ঘটে এবং কোনো গুরুত্বপূর্ণ ইভেন্ট ঘটলে মাইক্রোকন্ট্রোলারকে তাৎক্ষণিকভাবে সেই ইভেন্টের সাথে সাড়া দিতে দেয়।

Interrupts এর প্রকারভেদ

Interrupts প্রধানত দুই ধরনের হয়:

  1. External Interrupts: বাইরের ইভেন্ট যেমন বাটন প্রেস, সেন্সর সিগন্যাল ইত্যাদি দ্বারা তৈরি হয়। Arduino বোর্ডে একাধিক বাহ্যিক ইন্টারাপ্ট পিন থাকে (যেমন, 2 ও 3 পিন)।
  2. Timer Interrupts: সময় ভিত্তিক ইভেন্ট, যা টিমার ফাংশনালিটি ব্যবহার করে তৈরি হয়। এটি নির্দিষ্ট সময় অন্তর কোডের অংশ চালাতে সহায়তা করে।

Interrupts এর প্রয়োজনীয়তা

  • তাত্ক্ষণিক প্রতিক্রিয়া: Interrupts ব্যবহার করে বোর্ডকে প্রয়োজনীয় কাজগুলি তাত্ক্ষণিকভাবে সম্পন্ন করতে দেয়, যা প্রধান কোডের কার্যক্রমের সাথে মিলে না। উদাহরণস্বরূপ, একটি বাটন প্রেসের প্রতিক্রিয়া দ্রুতভাবে গৃহীত হতে পারে।
  • প্রক্রিয়াকরণ কার্যকারিতা: Interrupts প্রধান কার্যক্রম চলাকালীন নতুন ইনপুট বা তথ্য গ্রহণের সময় কার্যকরভাবে ব্যবহৃত হয়, যা প্রোগ্রামের কার্যকারিতা বৃদ্ধি করে।
  • পাওয়ার সাশ্রয়: Arduino একটি নির্দিষ্ট সময়ে Idle অবস্থায় থাকতে পারে এবং যখন ইন্টারাপ্ট ঘটে, তখন তাত্ক্ষণিকভাবে কার্যক্রম চালানো শুরু করতে পারে। এটি পাওয়ার সাশ্রয়ের জন্য উপকারী।
  • ডেটা গ্রহণ: সেন্সর থেকে ডেটা গ্রহণের সময়, যখন তথ্য আসবে তখন একটি ইন্টারাপ্ট ব্যবহার করে তা দ্রুত প্রক্রিয়া করা যায়। উদাহরণস্বরূপ, একটি সেন্সর থেকে ডেটা আসলে প্রোগ্রামটি তাৎক্ষণিকভাবে তথ্য গ্রহণ করতে পারে।

Interrupts ব্যবহারের উদাহরণ

নিচে একটি উদাহরণ দেওয়া হলো যেখানে একটি বাটনের প্রেসের জন্য ইন্টারাপ্ট ব্যবহৃত হচ্ছে:

const int buttonPin = 2; // বাটনের পিন
volatile int buttonState = 0; // ইন্টারাপ্টের মাধ্যমে পরিবর্তনশীল মান

void setup() {
  pinMode(buttonPin, INPUT); // বাটন পিনকে ইনপুট হিসেবে কনফিগার করা
  attachInterrupt(digitalPinToInterrupt(buttonPin), buttonISR, RISING); // ইন্টারাপ্ট সেট করা
  Serial.begin(9600); // সিরিয়াল মনিটর শুরু
}

void loop() {
  Serial.println(buttonState); // বাটনের অবস্থা প্রিন্ট করা
  delay(500); // ০.৫ সেকেন্ড অপেক্ষা
}

void buttonISR() { // ইন্টারাপ্ট রুটিন
  buttonState = 1; // বাটন প্রেস হলে মান পরিবর্তন
}

কোডের বিশ্লেষণ

  • attachInterrupt(): এই ফাংশনটি নির্দিষ্ট পিনের জন্য ইন্টারাপ্ট সেট করে এবং একটি ইন্টারাপ্ট সার্ভিস রুটিন (ISR) সংযুক্ত করে।
  • buttonISR(): এটি ইন্টারাপ্ট ঘটলে চলবে এবং এখানে বাটনের অবস্থা পরিবর্তন করা হয়।

উপসংহার

Interrupts ব্যবহার করে Arduino প্রোজেক্টে দ্রুত এবং কার্যকরী প্রতিক্রিয়া নিশ্চিত করা যায়। এটি সেন্সর ডেটা, ব্যবহারকারীর ইনপুট এবং অন্যান্য গুরুত্বপূর্ণ ইভেন্টের জন্য খুবই কার্যকর। Interrupts প্রোগ্রামের কার্যকারিতা এবং কার্যক্ষমতা বাড়ায়, যা বিশেষ করে রিয়েল-টাইম অ্যাপ্লিকেশনগুলোর জন্য অত্যন্ত গুরুত্বপূর্ণ।

common.content_added_by

attachInterrupt() এবং detachInterrupt() এর ব্যবহার

234
234

Arduino-তে attachInterrupt() এবং detachInterrupt() ফাংশন দুটি ব্যবহার করা হয় একটি নির্দিষ্ট ইন্টারাপ্টের মাধ্যমে বোর্ডের আউটপুট বা কার্যক্রম নিয়ন্ত্রণ করার জন্য। ইন্টারাপ্ট হল এমন একটি প্রক্রিয়া যা বোর্ডের একটি নির্দিষ্ট ইভেন্ট ঘটলে সাড়া দেয়। এই ফাংশনগুলো দিয়ে ইন্টারাপ্ট চালু এবং বন্ধ করা হয়।

attachInterrupt() ফাংশন

attachInterrupt() ফাংশন ব্যবহার করে Arduino বোর্ডে একটি ইন্টারাপ্টের জন্য একটি ফাংশন সংযুক্ত করা হয়। এটি বোর্ডের একটি পিনের উপর একটি নির্দিষ্ট ইভেন্ট ঘটলে নির্দিষ্ট ফাংশনটি কল করে।

গঠন

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);
  • pin: ইন্টারাপ্ট পিন, যা সাধারণত ডিজিটাল পিন।
  • ISR: ইন্টারাপ্ট সার্ভিস রুটিন (ISR) নামক ফাংশন যা ইন্টারাপ্ট ঘটে গেলে কল করা হবে।
  • mode: ইন্টারাপ্টের ট্রিগার মোড, যা হতে পারে:
    • RISING: পিনের মান পরিবর্তন হলে যখন এটি উচ্চে ওঠে।
    • FALLING: পিনের মান পরিবর্তন হলে যখন এটি নীচে নামে।
    • CHANGE: পিনের মান পরিবর্তন হলে।

detachInterrupt() ফাংশন

detachInterrupt() ফাংশন ব্যবহার করে একটি নির্দিষ্ট পিনের জন্য সংযুক্ত ইন্টারাপ্ট বন্ধ করা হয়। এটি বোর্ডকে ইন্টারাপ্ট ট্রিগার করার সময় নির্দিষ্ট ফাংশনটি আর কল করবে না।

গঠন

detachInterrupt(digitalPinToInterrupt(pin));
  • pin: যে পিনের জন্য ইন্টারাপ্টটি বন্ধ করতে হবে।

উদাহরণ: বোতাম প্রেস দ্বারা LED কন্ট্রোল

নিচে একটি উদাহরণ দেওয়া হলো যেখানে একটি বোতাম প্রেসের মাধ্যমে LED চালু এবং বন্ধ করা হয়েছে।

const int buttonPin = 2; // বোতাম পিন
const int ledPin = 13; // LED পিন

volatile bool ledState = LOW; // LED এর অবস্থা

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP); // বোতাম পিন ইনপুট হিসেবে কনফিগার করা
  attachInterrupt(digitalPinToInterrupt(buttonPin), toggleLED, FALLING); // ইন্টারাপ্ট সংযুক্ত করা
}

void loop() {
  digitalWrite(ledPin, ledState); // LED এর অবস্থা আপডেট করা
}

void toggleLED() {
  ledState = !ledState; // LED এর অবস্থা পাল্টানো
}

কোডের ব্যাখ্যা

  • volatile: এটি ব্যবহৃত হয় যাতে ISR ভেরিয়েবলটি মূল প্রোগ্রামের সাথে সঠিকভাবে সিঙ্ক্রোনাইজ থাকে। ISR ফাংশনের মধ্যে এই ভেরিয়েবলটি পরিবর্তন করা হয়।
  • attachInterrupt(): বোতাম প্রেস হলে toggleLED() ফাংশনটি কল করবে।
  • detachInterrupt(): এই উদাহরণে ব্যবহৃত হয়নি, কিন্তু এটি বোতামের জন্য ইন্টারাপ্ট বন্ধ করার জন্য ব্যবহার করা যেতে পারে যখন বোতাম আর প্রেস করা হচ্ছে না।

ব্যবহারিক টিপস

  • ইন্টারাপ্টের সংখ্যা: Arduino বোর্ডে বিভিন্ন পিনের জন্য নির্দিষ্ট সংখ্যক ইন্টারাপ্ট হতে পারে; প্রতিটি বোর্ডের জন্য এটি আলাদা হতে পারে।
  • ISR এ বিলম্ব: ISR এর মধ্যে delay() বা দীর্ঘকালীন কোড ব্যবহার করা উচিত নয়, কারণ এটি অন্যান্য কার্যক্রমকে ব্যাহত করতে পারে।
  • ডিবাগিং: যখন ইন্টারাপ্ট ব্যবহার করছেন, তখন সিরিয়াল মনিটরের মাধ্যমে ডিবাগ করা কঠিন হতে পারে, তাই সতর্ক থাকুন।

attachInterrupt() এবং detachInterrupt() ফাংশন Arduino প্রোগ্রামে ইন্টারাপ্ট ভিত্তিক কাজের জন্য অত্যন্ত কার্যকর। এগুলো ব্যবহার করে দ্রুত সাড়া দেওয়ার ক্ষমতা বাড়ানো যায় এবং বিভিন্ন প্রোজেক্টে কার্যকারিতা উন্নত করা যায়।

common.content_added_by

Timer Functions এবং তার কাজ

230
230

Arduino তে Timer Functions ব্যবহার করে নির্দিষ্ট সময়ের ব্যবধানের পর পর কিছু কাজ করা যায়। Timer Functions হল এমন কিছু ফাংশন যা একটি নির্দিষ্ট সময় বা ইন্টারভালে কাজ সম্পন্ন করতে সহায়তা করে। Arduino তে সাধারণত delay(), millis(), এবং micros() ফাংশন ব্যবহার করা হয় টাইমার ফাংশন হিসেবে। এসব ফাংশন বিভিন্ন প্রজেক্টে সঠিক সময় ব্যবধান ধরে রাখতে এবং ইন্টারভাল ভিত্তিক কাজ সম্পন্ন করতে সহায়তা করে।

Timer Functions এর ধরন ও কাজ

  • delay(): এই ফাংশন নির্দিষ্ট সময়ের জন্য প্রোগ্রামের কার্যক্রম স্থগিত রাখে। এটি মিলিসেকেন্ডে সময় গ্রহণ করে।
  • millis(): এটি প্রোগ্রাম শুরু হওয়ার পর থেকে কত মিলিসেকেন্ড পেরিয়ে গেছে তা বলে। এটি টাইমার হিসেবেও কাজ করতে পারে।
  • micros(): এটি প্রোগ্রাম শুরু হওয়ার পর থেকে কত মাইক্রোসেকেন্ড পেরিয়ে গেছে তা বলে।

delay() ফাংশন

delay() ফাংশন ব্যবহার করলে নির্দিষ্ট সময়ের জন্য প্রোগ্রামের কার্যক্রম স্থগিত হয়। এটি সাধারণত ছোট প্রকল্পে ব্যবধান তৈরি করতে ব্যবহার করা হয়।

উদাহরণ

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH); // LED অন
  delay(1000); // ১ সেকেন্ড অপেক্ষা
  digitalWrite(LED_BUILTIN, LOW); // LED অফ
  delay(1000); // ১ সেকেন্ড অপেক্ষা
}

কাজ: এখানে LED প্রতি ১ সেকেন্ড অন্তর অন এবং অফ হবে।

millis() ফাংশন

millis() ফাংশন দিয়ে প্রোগ্রাম শুরু হওয়ার পর থেকে কত মিলিসেকেন্ড পেরিয়ে গেছে তা জানা যায়। এটি টাইমার হিসেবে ব্যবহৃত হয় এবং প্রোগ্রামের কার্যক্রমে কোন প্রকার বিলম্ব ঘটায় না।

উদাহরণ

unsigned long previousMillis = 0; // পূর্বের সময় সংরক্ষণ
const long interval = 1000; // ১ সেকেন্ডের ইন্টারভাল

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis(); // বর্তমান সময় পড়া

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis; // পূর্বের সময় আপডেট করা
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // LED-এর অবস্থা পরিবর্তন করা
  }
}

কাজ: LED প্রতি ১ সেকেন্ড অন্তর অন এবং অফ হবে, কিন্তু প্রোগ্রামের অন্য অংশ চালু থাকবে।

micros() ফাংশন

micros() ফাংশন millis() এর মতোই কাজ করে, তবে এটি মাইক্রোসেকেন্ড হিসেবে সময় পড়ে। এটি আরও সূক্ষ্ম সময় ব্যবধানের প্রয়োজন হলে ব্যবহার করা হয়।

উদাহরণ

unsigned long startTime = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  startTime = micros(); // বর্তমান মাইক্রোসেকেন্ড পড়া
  Serial.print("Current Time: ");
  Serial.println(startTime); // মাইক্রোসেকেন্ড আউটপুট
  delay(1000); // ১ সেকেন্ড অপেক্ষা
}

কাজ: এখানে প্রতিবার লুপ চালানোর সময় বর্তমান সময় মাইক্রোসেকেন্ডে প্রিন্ট করা হবে।


Timer Functions এর ব্যবহারিক দিক

  • নির্ভুল সময় ব্যবধান: millis() এবং micros() প্রোগ্রামের অন্য কার্যক্রমে বিলম্ব ঘটায় না, তাই একই সাথে একাধিক কাজ সম্পন্ন করা সম্ভব।
  • ইন্টারভাল ভিত্তিক কাজ: Timer Functions ব্যবহার করে নির্দিষ্ট ইন্টারভালে সেন্সর পড়া, LED ফ্ল্যাশ করা, বা মোটর নিয়ন্ত্রণ করা যায়।
  • নন-ব্লকিং কোড: millis() ব্যবহার করে কোড নন-ব্লকিং করা যায়, যা প্রোগ্রামকে আরও কার্যকর করে তোলে।

Timer Functions ব্যবহার করার সতর্কতা

  • delay() ফাংশন প্রোগ্রামের কার্যক্রম থামিয়ে দেয়: delay() ব্যবহার করলে প্রোগ্রামের অন্য কাজগুলো স্থগিত থাকবে, তাই জটিল প্রকল্পে এটি কম ব্যবহার করা ভালো।
  • millis() এবং micros() রোলওভার সমস্যা: ৪৯.৭ দিন পর millis() এবং প্রায় ৭১ মিনিট পর micros() পুনরায় ০ থেকে শুরু হয়। বড় প্রোজেক্টে এটি মাথায় রাখা গুরুত্বপূর্ণ।

Timer Functions এর সঠিক ব্যবহার Arduino প্রোগ্রামে কার্যক্রম সময়মতো সম্পন্ন করতে এবং প্রোগ্রামের কার্যকারিতা বৃদ্ধি করতে সাহায্য করে।

common.content_added_by

External এবং Pin Change Interrupts এর উদাহরণ

219
219

Arduino-তে Interrupts একটি গুরুত্বপূর্ণ ফিচার যা একটি নির্দিষ্ট ইভেন্টের উপর ভিত্তি করে প্রোগ্রামকে স্থগিত করে এবং একটি নির্দিষ্ট ফাংশনকে চালু করে। এতে প্রোগ্রাম দ্রুত সাড়া দিতে পারে। Arduino-তে দুটি প্রধান ধরনের Interrupts রয়েছে: External Interrupts এবং Pin Change Interrupts

External Interrupts

External Interrupts তখন ব্যবহৃত হয় যখন একটি আউটসাইড ডিভাইস (যেমন বাটন) কোনো সিগন্যাল পাঠায়। Arduino-তে সাধারণত INT0 (পিন 2) এবং INT1 (পিন 3) ব্যবহার করা হয়।

উদাহরণ: External Interrupt

volatile bool buttonPressed = false;

void setup() {
  pinMode(2, INPUT_PULLUP); // পিন 2 ইনপুট হিসেবে কনফিগার করা
  attachInterrupt(digitalPinToInterrupt(2), buttonISR, FALLING); // পিন 2 এ ইন্টারাপ্ট যুক্ত করা
  Serial.begin(9600);
}

void loop() {
  if (buttonPressed) {
    Serial.println("Button was pressed!");
    buttonPressed = false; // ইন্টারাপ্ট ফ্ল্যাগ রিসেট করা
  }
}

void buttonISR() {
  buttonPressed = true; // ইন্টারাপ্ট ফ্ল্যাগ সেট করা
}

কোড বিশ্লেষণ

  • volatile: ভেরিয়েবলটি ইন্টারাপ্ট ফাংশনের দ্বারা পরিবর্তিত হচ্ছে, তাই এটি volatile হিসেবে ডিফাইন করা হয়েছে যাতে প্রধান লুপে সঠিকভাবে পড়া যায়।
  • attachInterrupt(): এই ফাংশনটি পিন 2-তে একটি ইন্টারাপ্ট যুক্ত করে, যা পিনের মান FALLING (নিচের দিকে পরিবর্তন) হলে buttonISR ফাংশনটি কল করে।
  • buttonISR(): ইন্টারাপ্ট ফাংশনটি ব্যতীত, এটি একটি ফ্ল্যাগ সেট করে যাতে মূল লুপে বোতাম চাপার তথ্য পাওয়া যায়।

Pin Change Interrupts

Pin Change Interrupts তখন ব্যবহৃত হয় যখন কোনো পিনের মান পরিবর্তন হয় (HIGH থেকে LOW বা LOW থেকে HIGH)। Arduino-তে সমস্ত ডিজিটাল পিনে Pin Change Interrupts সক্রিয় করা যায়।

উদাহরণ: Pin Change Interrupt

volatile bool ledState = false;

void setup() {
  pinMode(8, INPUT_PULLUP); // পিন 8 ইনপুট হিসেবে কনফিগার করা
  pinMode(13, OUTPUT); // পিন 13 আউটপুট হিসেবে কনফিগার করা
  PCMSK |= (1 << PCINT0); // পিন 8 এ পিন চেঞ্জ ইন্টারাপ্ট সক্রিয় করা
  GIMSK |= (1 << PCIE); // পিন চেঞ্জ ইন্টারাপ্ট সক্রিয় করা
  sei(); // গ্লোবাল ইন্টারাপ্ট সক্রিয় করা
}

void loop() {
  // লুপ খালি রাখা হয়েছে
}

ISR(PCINT0_vect) {
  ledState = !ledState; // LED স্টেট পরিবর্তন
  digitalWrite(13, ledState); // LED এর স্টেট পরিবর্তন করা
}

কোড বিশ্লেষণ

  • PCMSK এবং GIMSK: পিন চেঞ্জ ইন্টারাপ্টস সক্রিয় করার জন্য পোর্ট এবং গ্লোবাল ইন্টারাপ্ট সেটিংস কনফিগার করা হয়।
  • sei(): গ্লোবাল ইন্টারাপ্ট সক্রিয় করা।
  • ISR(PCINT0_vect): এই ফাংশনটি পিন চেঞ্জ ইভেন্টের সময় কল হয়, যেখানে LED এর স্টেট পরিবর্তন করা হয়।

সারসংক্ষেপ

  • External Interrupts সাধারণত বোতাম বা অন্যান্য বাহ্যিক ডিভাইসের জন্য ব্যবহৃত হয়, যা সরাসরি পিনে সিগন্যাল পাঠায়।
  • Pin Change Interrupts বিভিন্ন ডিজিটাল পিনে পরিবর্তন হলে কাজ করে এবং একাধিক পিনের পরিবর্তন ট্র্যাক করতে সহায়ক।

Arduino-তে ইন্টারাপ্ট ব্যবহার করার মাধ্যমে, আপনি প্রোগ্রামকে দ্রুত এবং কার্যকরভাবে সাড়া দিতে সক্ষম হবেন, যা আপনার প্রকল্পের কার্যকারিতা উন্নত করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion